"use strict";
/**
 * Created by Administrator on 2016/1/11.
 */
//===================================================================
// 常用的Jquery插件
// 作者：张国栋
// lastUpdateTime 2015-1-9
//====================================================================
//<ul>
//<li>
//    <a href="http://www.webo.com/liuwayong">我的微博</a>
//</li>
//<li>
//<a href="http://http://www.cnblogs.com/Wayou/">我的博客</a>
//</li>
//<li>
//    <a href="http://wayouliu.duapp.com/">我的小站</a>
//</li>
//</ul>
//<p>这是p标签不是a标签，我不会受影响</p>
//<script src="jquery-1.11.0.min.js"></script>
//        <script src="jquery.myplugin.js"></script>
//        <script type="text/javascript">
//            $(function(){
//            $('a').myPlugin();
//        })
//        </script>
//;(function($, window, document,undefined) {
//    //定义Beautifier的构造函数
//    var Beautifier = function(ele, opt) {
//        this.$element = ele,
//            this.defaults = {
//                'color': 'red',
//                'fontSize': '12px',
//                'textDecoration': 'none'
//            },
//            this.options = $.extend({}, this.defaults, opt)
//    }
//    //定义Beautifier的方法
//    Beautifier.prototype = {
//        beautify: function() {
//            return this.$element.css({
//                'color': this.options.color,
//                'fontSize': this.options.fontSize,
//                'textDecoration': this.options.textDecoration
//            });
//        }
//    }
//    //在插件中使用Beautifier对象
//    $.fn.myPlugin = function(options) {
//        //创建Beautifier的实体
//        var beautifier = new Beautifier(this, options);
//        //调用其方法
//        return beautifier.beautify();
//    }
//})(jQuery, window, document);
//
//$(function() {
//    $('a').myPlugin({
//        'color': '#2C9929',
//        'fontSize': '20px',
//        'textDecoration': 'underline'
//    });
//})

// 这个分号的作用是防止和其他jquery插件合并时，别人不规范的jquery插件忘记使用分号结束
//影响到我们当前的插件，导致无法运行的问题。
;
(function($, window, document, undefined) {

	// undefined作为形参的目的是因为在es3中undefined是可以被修改的
	//比如我们可以声明var undefined = 123,这样就影响到了undefined值的判断，幸运的是在es5中,undefined不能被修改了。
	// window和document本身是全局变量，在这个地方作为形参的目的是因为js执行是从里到外查找变量的（作用域），把它们作为局部变量传进来，就避免了去外层查找，提高了效率。

	// 声明默认属性对象
	var pluginName = "defaultPluginName",
		defaults = {
			propertyName: "value"
		};

	// 构造函数
	function Plugin(element, options) {
		this.element = element;
		// 将默认属性对象和传递的参数对象合并到第一个空对象中
		this.settings = $.extend({}, defaults, options);
		this._defaults = defaults;
		this._name = pluginName;
		this.init();
	}

	// 为了避免和原型对象Plugin.prototype的冲突，这地方采用继承原型对象的方法
	$.extend(Plugin.prototype, {
		init: function() {
			// 初始化，由于继承自Plugin原型，
			// 你可以在这里直接使用this.element或者this.settings
			console.log("xD");
		},
		yourOtherFunction: function() {
			// some logic
		}
	});

	// 对构造函数的一个轻量级封装，
	// 防止产生多个实例
	$.fn[pluginName] = function(options) {
		this.each(function() {
			if (!$.data(this, "plugin_" + pluginName)) {
				$.data(this, "plugin_" + pluginName, new Plugin(this, options));
			}
		});

		// 方便链式调用
		return this;
	};

})(jQuery, window, document);